feat(pipeline): version tag on indexed nodes + diff_versions MCP tool - #1064
feat(pipeline): version tag on indexed nodes + diff_versions MCP tool#1064isc-tdyar wants to merge 4 commits into
Conversation
|
The current PR cannot be reviewed against its stated purpose. Its title and body describe version tags and a diff_versions tool, but the branch currently contains the same body-token extractor change as PR #1060 and no versioning or MCP-tool implementation. Please restore the intended branch contents or close this PR if it was superseded; we should not review or merge a title/diff mismatch. |
aa67b7f to
cc2114c
Compare
cc2114c to
cfc72f0
Compare
|
You were right, the branch did contain the body-token change from #1060 instead of the versioning work. That was a mistake in how I built the branch, not a stale description. It has since been rebuilt from scratch off What's in the diff now:
Incremental indexing is skipped when a version tag is set, since a version stamp needs a full pass to be coherent. Sorry for the wasted review cycle on the mismatch. Ready for review when you get to it, and no rush, I know #1063 is also in your queue. |
Add cbm_pipeline_set_version() to stamp a version label (e.g. '28.0', '30.0') on every node emitted during indexing. Versioned runs bypass the incremental path so both versions accumulate side-by-side in the graph. Add diff_versions MCP tool: given a project, from_version, and to_version, returns added and removed node names (default label: Class, limit 500 per side) using OPTIONAL MATCH anti-join queries. Also auto-derives version from trailing numeric path segment in index_repository (e.g. /exports/MyApp/28.0 → version='28.0') when the version param is omitted. Refs DeusData#1065 Signed-off-by: Thomas Dyar <tdyar@intersystems.com>
Signed-off-by: Thomas Dyar <tdyar@intersystems.com>
Signed-off-by: Thomas Dyar <tdyar@intersystems.com>
…ion path Signed-off-by: Thomas Dyar <tdyar@intersystems.com>
cfc72f0 to
aae611e
Compare
|
Reviewed in depth. Thank you for the care in how you brought this — and I owe you an apology up front: you asked "is there appetite for this feature?" in #1062 and never got an answer before you built it. That silence is on us, and it is the reason you spent effort on something that now needs a direction decision it should have had first. Contributor hygiene here was model. Issue first, clean DCO'd commits, the parallel extraction path threaded correctly via Two findings you will want regardless of which way the direction call goes, because both mean the feature cannot work today. 1. The diff queries cannot parse. They use a variable property reference as a map value: Our Cypher subset does not support that. 2. Two versions can never coexist in one store. Setting a version forces the full-index path, and that path runs Why this shipped looking fine: One thing I would ask you to drop in any revision, independent of everything else. On cost, since it matters for the direction call: the tag is a per-node string copy rather than an interned id — What is actually being decided. The interesting question is not the tool; it is whether we want a multi-version snapshot concept in the graph data model at all. With N versions co-resident, That is with the maintainer now, along with the two defects above so the decision is made on accurate information. I will come back to you with a real answer this time. Two smaller notes for whenever it resumes: the diff identity uses short |
Adds version tagging on all indexed nodes and a
diff_versionsMCP tool for cross-version change detection.Closes #1062. Depends on #467 (ObjectScript language support) merging first — the Storage node inline-JSON change targets ObjectScript Storage nodes.
New API
cbm_pipeline_set_version(cbm_pipeline_t *p, const char *version_tag)Sets a version label (e.g.
"28.0") on a pipeline instance. When set, the tag is written as a"version"property on every node. Also bypasses the incremental-index path so versioned indexing always does a full pass — the graph accumulates both versions side-by-side.index_repositorytool: newversionparameter{ "repo_path": "/repos/myproject-28.0", "version": "28.0" }When omitted, a version-like segment (digits and dots) is auto-derived from the repo path. No behavior change for projects that don't use versioning.
diff_versionsMCP tool{ "project": "myproject", "from_version": "28.0", "to_version": "30.0", "label": "Class" }Returns
{"added": [...], "removed": [...], "from_version": "28.0", "to_version": "30.0"}. Default labelClass, limit 500 per side.Files changed
src/pipeline/pipeline.h—cbm_pipeline_set_version()declarationsrc/pipeline/pipeline_internal.h—version_tagfield on ctxsrc/pipeline/pipeline.c— setter, free, skip-incremental guard, ctx wiringsrc/pipeline/pass_definitions.c—versionproperty on all nodes; Storage nodes with structured docstring have fields merged inline as raw JSON rather than escapedsrc/pipeline/pass_parallel.c— same changes mirrored;version_tagthreaded through parallel workersrc/mcp/mcp.c—cbm_derive_version_from_path()helper,versionparam onindex_repository,diff_versionstool registered and handler implemented